package com.linln.modules.system.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.linln.common.enums.StatusEnum;
import com.linln.common.utils.StatusUtil;
import com.linln.component.excel.annotation.Excel;
import com.linln.component.excel.enums.ExcelType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author 小懒虫
 * @date 2018/8/14
 */
@Data
@Entity
@Table(name = "pcs_porter") // 修改: pcs_patient_admission -> pcs_porter
@ToString(exclude = {"dept", "roles"})
@EqualsAndHashCode(exclude = {"dept", "roles"})
@EntityListeners(AuditingEntityListener.class)
@SQLDelete(sql = "update pcs_porter" + StatusUtil.SLICE_DELETE) // 修改: pcs_patient_admission -> pcs_porter
@Where(clause = StatusUtil.NOT_DELETE)
@Excel("护工") // 修改: 患者住院记录 -> 护工
public class Porter implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Excel(value = "ID", type = ExcelType.EXPORT)
    private Long id;

    @CreatedDate
    @Excel("创建时间")
    private Date createTime;

    @LastModifiedDate
    @Excel("更新时间")
    private Date updateTime;

    @JsonIgnore
    private Long createUser;

    @JsonIgnore
    private Long updateUser;


    @Excel("姓名")
    private String name; // 新增字段

    @Excel("密码")
    private String password; // 新增字段

    @Excel("性别 1 男 2 女")
    private Byte sex; // 新增字段

    @Excel("身份证号")
    private String cardNo; // 新增字段

    @Excel("手机号")
    private String phone; // 新增字段

    @Excel("头像")
    private String headimg; // 新增字段

    @Excel("合同结束")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date contractEnd; // 新增字段

    @Excel("个人简介")
    @Lob
    private String intro; // 新增字段

    @Excel("1 启用/在职 0 禁用/离职")
    private Byte status = StatusEnum.OK.getCode(); // 新增字段

    @Excel("护理公司ID")
    private Long companyId; // 新增字段

    @Excel("护工当前服务人数")
    private Integer serviceNumber; // 新增字段

    @Excel("最少人数限制")
    private Integer leastLimit; // 新增字段

    @Excel("护工当前否可以继续接收服务 0否 1是")
    private Byte isStatus; // 新增字段

    @Excel("年龄")
    private Integer age;

    @Excel("评分")
    private Integer score;


    @Excel("科室ID")
    private Long depId = 0L;


    @Excel("项目人数限制")
    @Transient
    private Integer numberLimit;

    @Excel("证书列表")
    @Transient
    private List<PorterCredentials> credentials = new ArrayList<>();

    @Excel("陪护阶段列表")
    @Transient
    List<ProjectStage> projectStageList;

    @Transient
    private String contractEndStr; // 新增字段

    @Excel("项目ID")
    @Transient
    private Long projectId; // 新增字段

    //护理权限集合
    @Transient
    private List<PorterPermission> porterPermissions;
    //累计服务人数
    @Transient
    private Integer serviceNum;
    //当前陪护人数
    @Transient
    private Integer serviceNowNum;
    //当前陪诊人数
    @Transient
    private Integer accompanyingNum;
    //当前陪检人数
    @Transient
    private Integer checkNum;


    private String companyName;

    @Excel("价格")
    @Transient
    private Double price; // 新增字段

    @Excel("1按阶段选择 2按小时选择")
    @Transient
    private Integer stageType; // 新增字段

    @Excel("小时数(按小时选择)")
    @Transient
    private Integer hourNum; // 新增字段

    @Excel("阶段开始时间")
    @Transient
    private String timeStart; // 新增字段

    @Excel("阶段结束时间")
    @Transient
    private String timeEnd; // 新增字段

    @Excel("服务状态")
    @Transient
    private Integer serviceStatus;

    @Transient
    private Integer pzNumber;
    @Transient
    private Integer pjNumber;
    @Transient
    private String ageStr;

    @Transient
    private Integer sorts;

    @Transient
    private Integer changeStatus;

    @Transient
    private String changeTime;

    @Transient
    private int expireSoonCount;

    private Integer isWl;//是否为五类人员0否 1是
}
